// pages/afterSalesEdit/afterSalesEdit.js
const app = getApp();
import CommonService from '../../utils/service/commonService.js';
import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast';
const util = require('../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //提交按钮禁用
    disabled:false,
    //故障类型选择框
    showType:false,
    //故障类型选择数据
    typeList:[],
    //选择的故障类型id
    typeId: '',
    //选择的故障类型名字
    typeName: '',
    //处理方式选择框
    showMethod:false,
    //处理方式选择数据
    methodList:[],
    //选择的处理方式id
    methodId: '',
    //选择的处理方式名字
    methodName: '',
    //上传的图片
    imgUrls:[],
    //传参来的信息
    paramObj:null,
    //传参来的id
    id:null,
    //修改信息回显
    editInfo:{},
    currentDate: new Date().getTime(),
    //结束时间
    processingEndTime:util.timeFormat(new Date()),
    //结束时间选择框
    showProcessingEndTime:false,
    currentDate2: new Date().getTime(),
    //最大最小值
    maxDate2: new Date().getTime(),
    minDate2:null,
    //格式
    formatter (type, value) {
      if (type === 'year') {
        return `${value}年`
      } else if (type === 'month') {
        return `${value}月`
      } else if (type === 'day') {
        return `${value}日`
      } else if (type === 'hour') {
        return `${value}时`
      } else if (type === 'minute') {
        return `${value}分`
      } else if (type === 'second') {
        return `${value}秒`
      }
      return value
    },
    //是否显示接单人
    showDirectWriter: false,
    //接单人选择框
    showDirect:false,
    //接单人选择数据
    directList:[],
    //接单人id
    directId: '',
    //接单人名字
    directName: '',
    //图片回显
    picSelf:[],
    //搜索人员输入的值
    valueSearchStaff:'',
    //服务信息
    serviceDetails:[],
    //平台id
    myAppId:null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      myAppId:app.globalData.myAppId
    })

    if(options.paramObj){
      this.setData({
        paramObj: JSON.parse(options.paramObj)
      })

      console.log('接待信息传参');
      console.log(JSON.parse(options.paramObj));

      //获取要修改的数据
      this.getInfo();
    }
  },

  //获取要修改的数据
  getInfo(){
    let param = {
      isAuth: false,
      className: 'afterSaleServiceRecord',
      data: {
        id:this.data.paramObj.id,
        selectFields: ['processingPerson','processingTime','processingEndTime','remark','ProcessingPhone','faultType','method','id','serviceDetails','pic','directWriter','typeName','methodName','oldStore','faultDesc','methodResult']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let info=res.data.data.result[0];
        this.setData({
          editInfo: info,
          //结束时间最小值是接待时间
          minDate2: info.processingTime ? new Date(info.processingTime).getTime() : null,
          serviceDetails: info.serviceDetails
        })

        //修改信息回显
        this.getInputValue();
      }
    }).catch((error) => {
    })
  },

  //修改信息回显
  getInputValue(){
    let info=this.data.editInfo;

    console.log('售后信息回显');
    console.log(info);

    this.setData({
      typeId:info.faultType ? info.faultType : null,
      typeName: info.typeName ? info.typeName : null,
      methodId:info.method ? info.method : null,
      methodName: info.methodName ? info.methodName : '',
      processingEndTime:info.processingEndTime ? util.timeFormat(info.processingEndTime) : null,
      imgUrls:info.pic
    })

    //处理接单人
    if(info.directWriter && info.directWriter.id){
      this.setData({
        showDirectWriter: true,
        directId: info.directWriter.id,
        directName:info.directWriter.name,
        directObj:{
          id:info.directWriter.id,
          serviceName:info.directWriter.name,
          telephone:info.directWriter.telephone
        }
      })
    }

    //处理图片
    if(info.pic && info.pic.length){
      let imgs=info.pic;
      let arr=[];
      imgs.forEach(item => {
        arr.push(item.url)
      });
      this.setData({
        picSelf: arr
      })
    }
  },

  //提交表单
  confirmForm(e){
    let obj=e.detail.value;
    let td=this.data;
    let user = app.globalData.userInfo;
    let info=td.editInfo;

    //验证非空

      //故障类型
      if(!td.directId && !td.typeId){
        Toast.fail('请选择故障类型');
        return;
      }

      //真实故障描述
      let faultDesc=obj.faultDesc.trim();
      if(!td.directId && !faultDesc){
        Toast.fail('请输入真实故障描述');
        return;
      }

      //处理方式
      if(!td.directId && !td.methodId){
        Toast.fail('请选择处理方式');
        return;
      }

      //处理结果
      let methodResult=obj.methodResult.trim();
      if(!td.directId && !methodResult){
        Toast.fail('请输入处理结果');
        return;
      }

    //接单人
    let directWriter=null;

    //服务记录
    let serviceDetails=this.data.serviceDetails;

    //接单人
    if(td.showDirectWriter && td.directId){
      let direct=td.directObj;
      directWriter={
        id:direct.id,
        name:direct.serviceName,
        telephone:direct.telephone
      }

      //接单人是否修改-不同的服务记录
      if(info.directWriter && info.directWriter.id){
        if(info.directWriter.id!=direct.id){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改接单人' + direct.serviceName
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置接单人' + direct.serviceName
        });
      }
    }

    //工单完成时间
    if(td.processingEndTime){
      if(info.processingEndTime){
        if(info.processingEndTime!=td.processingEndTime){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改工单完成时间'
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置工单完成时间'
        });
      }
    }

    //故障类型
    if(td.typeId){
      if(info.faultType){
        if(info.faultType!=td.typeId){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改故障类型'
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置故障类型'
        });
      }
    }

    //真实故障
    if(faultDesc){
      if(info.faultDesc){
        if(info.faultDesc!=faultDesc){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改真实故障原因'
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置真实故障原因'
        });
      }
    }

    //处理方式
    if(td.methodId){
      if(info.method){
        if(info.method!=td.methodId){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改处理方式'
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置处理方式'
        });
      }
    }

    //处理结果
    if(methodResult){
      if(info.methodResult){
        if(info.methodResult!=methodResult){
          serviceDetails.push({
            datetime: util.timeFormat(new Date()),
            content: user.userName + '修改处理结果'
          });
        }
      }else{
        serviceDetails.push({
          datetime: util.timeFormat(new Date()),
          content: user.userName + '设置处理结果'
        });
      }
    }

    let param={
      className:'afterSaleServiceRecord',
      data:{
        id:td.paramObj.id,
        //故障类型
        faultType:td.typeId,
        //故障类型名称
        typeName:td.typeName,
        //处理方式
        method:td.methodId,
        //处理方式
        methodName:td.methodName,
        //工单结束时间
        processingEndTime:td.processingEndTime,
        //特殊情况备注
        remark:obj.remark,
        //真实故障
        faultDesc:faultDesc,
        //处理结果
        methodResult:methodResult,
        //图片
        pic:td.imgUrls,
        //是否旧件入库
        oldStore:td.editInfo.oldStore,
        //接单人
        directWriter:directWriter,
        //服务记录
        serviceDetails:serviceDetails
      }
    }

    //console.log(param.data);

    CommonService.goSave(param).then(res=>{
      if (res.statusCode == 200 && res.data.success == true){
        Toast.success('成功');

        setTimeout(() => {
          //返回列表页并刷新数据
          this.backAndRefresh();
        }, 1000);
      }else{
        Toast.fail('操作失败');
      }
    }).catch((error) => {
    })
  },

  //用户输入时清除错误提示
  clearMessage(e) {
    let field = e.target.dataset.message;
    let obj = {};
    obj[field] = "";
    obj['disabled'] = false;
    this.setData(obj);
  },

  //显示故障类型选择框
  onShowType(){
    this.setData({
			showType: true
    })
    this.getType();
  },

  //查询故障类型
  getType(){
    let param = {
      isAuth: false,
      className: 'dictionary',
      data: {
        searchAll: true,
        key: 'faultType',
        selectFields: ['id','name']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            id:item.id,
            text:item.name
          });
        });
        this.setData({
          typeList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //隐藏故障类型选择框
  onCloseType(){
    this.setData({
			showType: false
    })
  },

  //确认故障类型
  onConfirmType(e){
    this.setData({
      typeId: e.detail.value.id,
      typeName: e.detail.value.text
    })
    this.onCloseType();
  },

  //显示处理方式选择框
  onShowMethod(){
    this.setData({
			showMethod: true
    })
    this.getMethod();
  },

  //查询处理方式
  getMethod(){
    let param = {
      isAuth: false,
      className: 'dictionary',
      data: {
        searchAll: true,
        key: 'processMode',
        selectFields: ['id','name']
      }
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            id:item.id,
            text:item.name
          });
        });
        this.setData({
          methodList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //隐藏处理方式选择框
  onCloseMethod(){
    this.setData({
			showMethod: false
    })
  },

  //确认处理方式
  onConfirmMethod(e){
    this.setData({
      methodId: e.detail.value.id,
      methodName: e.detail.value.text
    })
    this.onCloseMethod();
  },

  //显示完成时间选择框
  onShowProcessingEndTime(){
    this.setData({
			showProcessingEndTime: true
    })
  },

  //隐藏完成时间选择框
  onCloseProcessingEndTime(){
    this.setData({
			showProcessingEndTime: false
    })
  },

  //确认完成时间
  onConfirmProcessingEndTime(e) {
    this.setData({
      currentDate2: e.detail,
      maxDate1:e.detail,
      processingEndTime:util.timeFormat(e.detail),
    })
    this.onCloseProcessingEndTime();
  },

  //返回列表页并刷新数据
  backAndRefresh(){
    let pages = getCurrentPages();
    let prevPage = pages[pages.length - 2];

    prevPage.refreshListAndPage();
    wx.navigateBack();
  },

  //获取图片上传组件的传值
  getUploadUrl(data){
    let imgUrls=data.detail;
    let imgArr=[];
    for(let i=0;i<imgUrls.length;i++){
      let obj={
        url:imgUrls[i]
      }
      imgArr.push(obj);
    }
    if(imgUrls.length){
      this.setData({
        imgUrls: imgArr
      })
    }
  },

  //切换显示接单人
  onChangeDirectWriter({detail}) {
    this.setData({
      showDirectWriter: detail
    })

    //接单人置空
    if(detail==false){
      this.setData({
        directId: null,
        directName:'',
        directObj:null
      })
    }
  },

  //显示接单人选择框
  onShowDirect(){
    this.setData({
			showDirect: true
    })
    this.getStaffList();
  },

  //查询接单人
  getStaffList(){
    this.setData({
      directList: []
    })

    let param={
      isAuth:true,
      className:'servicePersonal',
      data:{
        searchAll:true,
        serviceName:{
          '!=':app.globalData.userInfo.userName
        },
        selectFields: ['id','serviceName','telephone','type'],
        sort: {
          id: -1
        },
      }
    }

    //按平台查询记录
    let appId=app.globalData.myAppId;
    if(appId!=3){
      if(app.globalData.afterSaleSelf){
        //是否独立售后
        param.data.appId=app.globalData.myAppId;
      }else{
        param.data.appId=[2,3,null];
      }
    }else{
      param.data.appId=[2,3,null];
    }

    //人员模糊查询
    if(this.data.valueSearchStaff){
      param.data.serviceName='%'+this.data.valueSearchStaff+'%'
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let list=res.data.data.result;
        let arr=[];
        for(let i=0;i<list.length;i++){
          let obj={
            text:list[i].serviceName+" "+list[i].telephone,
            id:list[i].id,
            obj:list[i]
          }
          arr.push(obj);
        }
        this.setData({
          directList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //隐藏接单人选择框
  onCloseDirect(){
    this.setData({
      showDirect: false,
      valueSearchStaff:''
    })
  },

  //确认接单人
  onConfirmDirect(e){
    this.setData({
      directId: e.detail.value.id,
      directName: e.detail.value.text,
      directObj: e.detail.value.obj
    })
    this.onCloseDirect();
  },

  //跳转添加售后人员
  goToAddStaff(){
    wx.navigateTo({
      url: "/packageA/pages/servicePersonalAdd/servicePersonalAdd"
    })
  },

  //选择人员-搜索
  onChangeStaff(e){
    this.setData({
      valueSearchStaff: e.detail
    })
    this.getStaffList();
  },

  //旧件入库切换
  onChangeOldStore({detail}) {
    let oldStore='editInfo.oldStore';
    this.setData({
      [oldStore]:detail
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  }
})
